Attention, Transformers, এবং অন্যান্য উন্নত লেয়ারগুলি বর্তমানে ডীপ লার্নিংয়ে গুরুত্বপূর্ণ ভূমিকা পালন করছে, বিশেষ করে Natural Language Processing (NLP) এবং Computer Vision ক্ষেত্রে। এগুলির সাহায্যে মডেলগুলি দীর্ঘকালের নির্ভরতা (long-range dependencies) ভালোভাবে শিখতে পারে এবং আরও দক্ষভাবে কাজ করতে সক্ষম হয়।
1. Attention Mechanism
Attention Mechanism একটি অত্যন্ত শক্তিশালী কৌশল যা মডেলকে তার ইনপুট থেকে গুরুত্বপূর্ণ অংশগুলো ফোকাস করার সুযোগ দেয়। এতে, প্রতিটি ইনপুট শব্দের গুরুত্ব নির্ধারণ করা হয় এবং সেই অনুযায়ী তাদের উপর ফোকাস করা হয়।
Attention Mechanism এর ধারণা:
Attention কাজ করে ইনপুটের মধ্যে প্রতিটি উপাদানের সাথে সম্পর্কের ভিত্তিতে আউটপুট তৈরি করতে। এটি ভাষা মডেলগুলিতে যেমন machine translation বা text summarization কাজে আসে।
Simple Attention Layer Implementation
import tensorflow as tf
from tensorflow.keras.layers import Layer
class Attention(Layer):
def __init__(self):
super(Attention, self).__init__()
def build(self, input_shape):
# Query, Key, and Value weight matrices
self.Wq = self.add_weight(shape=(input_shape[-1], input_shape[-1]), initializer="random_normal", trainable=True)
self.Wk = self.add_weight(shape=(input_shape[-1], input_shape[-1]), initializer="random_normal", trainable=True)
self.Wv = self.add_weight(shape=(input_shape[-1], input_shape[-1]), initializer="random_normal", trainable=True)
def call(self, inputs):
Q = tf.matmul(inputs, self.Wq) # Query
K = tf.matmul(inputs, self.Wk) # Key
V = tf.matmul(inputs, self.Wv) # Value
# Scaled Dot-Product Attention
attention_scores = tf.matmul(Q, K, transpose_b=True) / tf.sqrt(tf.cast(K.shape[-1], tf.float32))
attention_weights = tf.nn.softmax(attention_scores, axis=-1)
# Weighted sum of values
attention_output = tf.matmul(attention_weights, V)
return attention_output
- Q (Query), K (Key), এবং V (Value) শব্দের প্রতিনিধিত্ব করার জন্য তিনটি আলাদা ওজনের ম্যাট্রিক্স তৈরি হয়।
- Scaled Dot-Product attention ব্যবহার করে, আমরা query এবং key এর মধ্যে স্কেল করা ডট প্রডাক্ট বের করি এবং তারপর softmax করে importance weights বের করি।
- আখেরাতে, এই attention weights দ্বারা values এর উপর গুনফল করে আউটপুট তৈরি করা হয়।
2. Transformer Model
Transformers হল একটি আর্কিটেকচার যা Attention Mechanism ব্যবহার করে এবং এটি প্রচুর পরিমাণে পরামিতি এবং কম্পিউটেশনাল ক্ষমতা দিয়ে সেরা ফলাফল প্রদান করে। Transformers মডেলটি, বিশেষ করে BERT, GPT, T5 ইত্যাদি মডেলগুলির ভিত্তি হিসেবে ব্যবহৃত হয় এবং এটি Sequence-to-Sequence সমস্যাগুলির জন্য কার্যকরী।
Transformer এর প্রধান বৈশিষ্ট্য হলো এটি self-attention ব্যবহার করে পুরো সিকোয়েন্সের মধ্যে সম্পর্ক শিখে। এতে, প্রতিটি টোকেন (বা শব্দ) তার কনটেক্সট থেকে অন্যান্য টোকেনের সাথে সম্পর্ক শিখে।
Transformer Layer Implementation
import tensorflow as tf
from tensorflow.keras.layers import Layer, Dense, LayerNormalization, Dropout
class TransformerBlock(Layer):
def __init__(self, embed_size, num_heads, ff_size, dropout_rate=0.1):
super(TransformerBlock, self).__init__()
self.attention = tf.keras.layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_size)
self.ffn = tf.keras.Sequential([
Dense(ff_size, activation='relu'),
Dense(embed_size)
])
self.layer_norm1 = LayerNormalization()
self.layer_norm2 = LayerNormalization()
self.dropout1 = Dropout(dropout_rate)
self.dropout2 = Dropout(dropout_rate)
def call(self, inputs, mask=None):
# Multi-Head Attention
attn_output = self.attention(inputs, inputs, inputs, attention_mask=mask) # self-attention
attn_output = self.dropout1(attn_output)
out1 = self.layer_norm1(inputs + attn_output)
# Feed Forward Network
ffn_output = self.ffn(out1)
ffn_output = self.dropout2(ffn_output)
out2 = self.layer_norm2(out1 + ffn_output)
return out2
- MultiHeadAttention: এটি একটি গুরুত্বপূর্ণ অংশ, যেখানে একাধিক attention "heads" ব্যবহৃত হয়।
- Feed-Forward Network (FFN): এটি একটি দু'টি লেয়ার ধারণকারী নিউরাল নেটওয়ার্ক যা attention output এর উপর কাজ করে।
- LayerNormalization: মডেলটি দ্রুত শিখতে সাহায্য করে এবং স্ট্যাবিলিটি বাড়ায়।
- Dropout: overfitting কমানোর জন্য ব্যবহৃত হয়।
3. Positional Encoding
Transformer মডেলটি ইনপুট হিসেবে সিকোয়েন্সের কোনো অর্ডার সংরক্ষণ করে না, তাই Positional Encoding ব্যবহৃত হয় যাতে মডেল সিকোয়েন্সের শব্দগুলির অবস্থান জানতে পারে।
Positional Encoding Implementation
import numpy as np
import tensorflow as tf
def get_positional_encoding(seq_len, d_model):
pos = np.arange(seq_len)[:, np.newaxis] # (seq_len, 1)
i = np.arange(d_model)[np.newaxis, :] # (1, d_model)
angle_rates = 1 / np.power(10000, (2 * (i // 2)) / np.float32(d_model))
angle_rads = pos * angle_rates
positional_encoding = np.zeros((seq_len, d_model))
positional_encoding[:, 0::2] = np.sin(angle_rads[:, 0::2]) # Apply sin to even indices
positional_encoding[:, 1::2] = np.cos(angle_rads[:, 1::2]) # Apply cos to odd indices
return tf.constant(positional_encoding, dtype=tf.float32)
# Example usage
seq_len = 50
d_model = 128
pos_encoding = get_positional_encoding(seq_len, d_model)
print(pos_encoding.shape) # Output: (50, 128)
- Sin and Cos: এই দুটি ফাংশন ব্যবহার করে শব্দের অবস্থানগত (positional) তথ্য এমবেডিংয়ে যোগ করা হয়।
4. BERT (Bidirectional Encoder Representations from Transformers)
BERT একটি ট্রান্সফরমার ভিত্তিক মডেল যা bidirectional attention ব্যবহার করে। এটি শুধু বাম থেকে ডান নয়, বরং উভয় দিকে থেকে কনটেক্সট শিখতে পারে। এটি মূলত pre-training এবং fine-tuning দুটি ধাপে কাজ করে।
BERT Architecture Overview:
- Pre-training: বেসিক ভাষার মডেল প্রশিক্ষণ যা ভাষার প্রাথমিক কনটেক্সট এবং সম্পর্ক শিখে।
- Fine-tuning: নির্দিষ্ট টাস্কের জন্য প্রশিক্ষণ, যেমন টেক্সট ক্লাসিফিকেশন বা প্রশ্নোত্তর সিস্টেম।
5. GPT (Generative Pre-trained Transformer)
GPT ট্রান্সফরমার আর্কিটেকচারের একটি ভ্যারিয়েন্ট, যা বিশেষভাবে autoregressive language models তৈরি করতে ব্যবহৃত হয়। এটি একটি ডিপলার্নিং মডেল যা পূর্ববর্তী শব্দগুলির ভিত্তিতে নতুন শব্দ তৈরি করতে সক্ষম।
GPT-3 Architecture:
- GPT-3 একটি decoder-only ট্রান্সফরমার, যা কেবলমাত্র ইনপুট টেক্সটের ভিত্তিতে নতুন টেক্সট তৈরি করতে পারদর্শী।
6. Final Notes
- Attention Mechanism শব্দগুলির মধ্যে সম্পর্ক শিখতে সাহায্য করে, বিশেষত NLP অ্যাপ্লিকেশনগুলিতে।
- Transformer এবং এর ভ্যারিয়েন্টগুলি (যেমন BERT এবং GPT) অধিক কার্যকরী এবং দ্রুত কাজ করে, কারণ তারা পুরো সিকোয়েন্সের কনটেক্সট একযোগভাবে শিখতে সক্ষম হয়।
- Positional Encoding ট্রান্সফরমার মডেলগুলিতে সিকোয়েন্সের অবস্থান সংক্রান্ত তথ্য রাখে, যা মডেলটি শব্দের স্থানিক সম্পর্ক বুঝতে সাহায্য করে।
এভাবে, Attention, Transformer, এবং অন্যান্য উন্নত লেয়ারগুলি ডীপ লার্নিং মডেলের কার্যকারিতা বাড়ানোর জন্য ব্যবহৃত হয়, বিশেষত NLP এবং Computer Vision এর জন্য।
Read more